<?php
require_once 'SessionController.php';
if(!verificaLogin()) return;

require_once '../../../../Utils/Conexion.php';
require_once '../../../Utils/RefreshData.php';

$usuarioId = $_SESSION["usuario"]["id"];


$accion = FALSE;
$valor = 0;
//RECIBIDOS
if (isset($_POST["accion"])) $accion = $_POST["accion"];
if (isset($_POST["valor"])) $valor = $_POST["valor"];

//SESSION
$torneoId = 0;
if(isset($_SESSION['torneoId'])) $torneoId = $_SESSION['torneoId'];

if(!$torneoId){
    die("No ha seleccionado ningún Torneo");
}



if($accion) {
    if($accion === 'GET_IMPORTE') {
        echo getImporte($valor, true);    
    } else if($accion === 'GUARDAR') {
        echo guardar();
    }
}


function getData($pid) {
    global $torneoId ;
    $data = FALSE;

    $query = "SELECT IFNULL(ps.id,0) AS pokerSpecificId, p.id AS personaId, IFNULL(ps.oportunidad, 0) AS oportunidad, 
                     p.documento AS documento, ps.estado AS estado, p.apenom AS apenom 
              FROM personas AS p 
              LEFT JOIN poker_specifics AS ps ON p.id = ps.persona_id AND ps.poker_torneo_id = $torneoId 
              WHERE p.id = $pid LIMIT 1";
    $result = consultar($query);
    if($result) {
        $data = $result[0];
        //Trae los datos estáticos del Torneos
        $tsd = getTorneoData();
        if($tsd) {
            $data['moneda'] = $tsd['moneda'];
            $data['maxMesas'] = $tsd['maxMesas'];
            $data['maxPosiciones'] = $tsd['maxPosiciones'];
        } else {
            $data = FALSE;
        }
    }
    return $data;
}


//DEVUELVE DATOS ESTATICOS DEL TORNEO
function getTorneoData(){
    global $torneoId;
    $respuesta = FALSE;
    $query = "SELECT m.nombre_corto AS moneda, 
                     pt.cantidad_mesas AS maxMesas, 
                     pt.jugadores_x_mesa AS maxPosiciones 
              FROM poker_torneos pt, monedas m
              WHERE pt.moneda_id = m.id 
              AND pt.id = $torneoId LIMIT 1";
    $respuestas = consultar($query);
    if($respuestas) {
        $respuesta = $respuestas[0];
    }
    return $respuesta;
}


//DEVUELVE LISTADO DE PROMOCIONES EXISTENTES PARA EL TORNEO
function getPromociones() {
    global $torneoId;
    $query = "SELECT DISTINCT(promo) AS promo FROM poker_asignaciones WHERE poker_torneo_id = $torneoId AND tipo = 'INSCRIPCION'";
    $promociones = consultar($query);
    return $promociones;
}


//DEVUELVE EL MONTO ACUMULADO PARA UNA PROMOCION DADA
function getImporte($promo, $text) {
    global $torneoId;
    $respuesta = 0;
    $f = "";
    if($promo === 'NORMAL') {
        $f = " AND tipo = 'INSCRIPCION' ";
    }
    $query = "SELECT SUM(monto) AS monto 
              FROM poker_asignaciones  
              WHERE poker_torneo_id = $torneoId 
              AND promo = '$promo' $f ";
    $montos = consultar($query);
    if($montos) {
        $respuesta = $montos[0]['monto'];
    }
    if($text) {
        $respuesta = number_format($respuesta, 2, ",", ".");
    }
    return $respuesta;
}


//DEVUELVE EL CODIGO DE LA PERSONA PARA EL TORNEO ACTUAL
function getCodigo($persId) {
    global $torneoId;
    $code = str_pad($torneoId, 3, "0", STR_PAD_LEFT).str_pad($persId, 6, "0", STR_PAD_LEFT);
    echo $code;
}


//VERIFICA LA DISPONIBILIDAD DE LA MESA Y LUGAR ASIGNADOS
function lugarDisponible($mesa, $posicion) {
    global $torneoId;
    $resp = TRUE;
    if($mesa && $posicion) { 
        $query = "SELECT id 
                  FROM poker_specifics 
                  WHERE poker_torneo_id = $torneoId 
                  AND mesa_numero = $mesa 
                  AND mesa_posicion = $posicion";
        $r = consultar($query);
        if($r) {
            $resp = FALSE;
        }
    }
    return $resp;
}


function getPokerAsignaciones($promo) {
    global $torneoId;
    $filtro = "";
    if($promo === "NORMAL") $filtro = "AND tipo='INSCRIPCION' ";
    $query = "SELECT id, tipo, monto, puntos FROM poker_asignaciones 
              WHERE poker_torneo_id = $torneoId 
              AND promo = '$promo' $filtro";
    $resultados = consultar($query);
    return $resultados;
}


//OBTIENE LOS PUNTOS CORRESPONDIENTES A LA INSCRIPCION
function getPuntosInscripcion($promo) {
    global $torneoId;
    $respuesta = 0;
    $query = "SELECT puntos FROM poker_asignaciones 
              WHERE poker_torneo_id = $torneoId 
              AND tipo = 'INSCRIPCION' 
              AND promo = '$promo' 
              LIMIT 1";
    $resultados = consultar($query);
    if($resultados) {
        $respuesta = $resultados[0]['puntos'];
    }
    return $respuesta;
}


//GUARDAR
function guardar() {
    global $torneoId, $usuarioId;
    $personaId = false; $pokerSpecificId = false; $promocion = false; $puntos = false;
    $monto = false; $mesa = false; $posicion = false; $codigo = false;
    if (isset($_POST["personaId"])) $personaId = $_POST["personaId"];
    if (isset($_POST["pokerSpecificId"])) $pokerSpecificId = $_POST["pokerSpecificId"];
    if (isset($_POST["cmbPromocion"])) $promocion = $_POST["cmbPromocion"];
    if (isset($_POST["monto"])) $monto = $_POST["monto"];
    if (isset($_POST["mesa"])) $mesa = $_POST["mesa"];
    if (isset($_POST["posicion"])) $posicion = $_POST["posicion"];
    if (isset($_POST["codigo"])) $codigo = $_POST["codigo"];
    $oportunidad = (isset($_POST["oportunidad"]))? $_POST["oportunidad"]+1:1;
    
    //echo "PERSONA: $personaId <br>PS: $pokerSpecificId <br>PROMO: $promocion <br>MONTO: $monto <br>MESA: $mesa <br>POS: $posicion <br>CODE: $codigo<br>";
    
    //VERIFICO QUE LLEGUEN TODOS LOS DATOS
    if(!$personaId || $pokerSpecificId<0 || !$promocion || !$monto || !$mesa ||!$posicion || !$codigo) {        
        return "DATOS INCOMPLETOS, FAVOR VERIFIQUE!";
    }
    
    //VERIFICO QUE NO EXISTA LA POSICION EN MESA
    if(!lugarDisponible($mesa, $posicion)) {
        return "YA EXISTE UN PARTICIPANTE EN LA MESA $mesa CON LA POSICIÓN $posicion.
                <script type='text/javascript'> $('#posicion').val('').focus(); </script>";
    }
    
    //VERIFICO Y OBTENGO LOS PUNTOS CORRESPONDIENTES A LA INSCRIPCION
    $puntos = getPuntosInscripcion($promocion);    
    if(!$puntos) {
        return "NO SE PUDO DETERMINAR EL PUNTAJE PARA ESTA INSCRIPCIÓN";
    }
    
    
    //COMIENZA GUARDADO DE DATOS
    $query = "";
    
    //INSERTA O ACTUALIZA LA TABLA POKER SPECIFICS
    if($pokerSpecificId == 0) {
        $query = "INSERT INTO poker_specifics (persona_id, poker_torneo_id, oportunidad, mesa_numero, mesa_posicion, puntos, estado, codigo) 
                   VALUES ($personaId, $torneoId, $oportunidad, $mesa, $posicion, $puntos, 'INSCRIPTO', '$codigo'); ";
    } else {
        $query = "UPDATE poker_specifics 
                   SET mesa_numero = $mesa, mesa_posicion = $posicion, estado = 'INSCRIPTO', puesto = NULL, 
                       codigo = '$codigo', puntos = (puntos + $puntos), oportunidad = $oportunidad 
                   WHERE id = $pokerSpecificId LIMIT 1; ";
    }
    
    //INSERTA EL REGISTRO DE LA INSCRIPCION EN POKER MOVIMIENTOS
    $asignaciones = getPokerAsignaciones($promocion);
    if($asignaciones) {
        foreach ($asignaciones as $a) {
            $tipo = $a['tipo'];
            if($promocion === "NORMAL") {
                $descripcion = "INSCRIPCION NORMAL DE PARTICIPANTE.";
                $tipo = "INSCRIPCION NORMAL";
            } else {
                $descripcion = $a['tipo']." PROMOCIONAL: $promocion";
                $tipo = $a['tipo']." $promocion";
            }
            $comentario = "";
            if($a['tipo'] === 'INSCRIPCION') {
                $comentario = "PUNTOS ACREDITADOS: $puntos, MESA NÚMERO: $mesa, POSICIÓN: $posicion";
            }
            
            $query .= "INSERT INTO poker_movimientos (poker_torneo_id, persona_id, usuario_id, poker_asignacion_id, oportunidad, tipo, descripcion, comentario, ingreso, egreso)
                       VALUES ($torneoId, $personaId, $usuarioId, ".$a['id'].",$oportunidad, '".$tipo."', '$descripcion', '$comentario', ".$a['monto'].", 0);";
            
            if($a['tipo']!= 'INSCRIPCION') {
                $query .= "INSERT INTO poker_asignaciones_por_persona (poker_torneo_id, persona_id, poker_asignacion_id) VALUES ($torneoId, $personaId, ".$a['id'].");";
            }
        }
    }
    
    $e = multiQuery($query);
    
    //EJECUTA EL ACTUALIZADOR DE DATOS DEL TORNEO
    refreshTorneoData($torneoId);
    
    
    if ($e) {
        return "<script type='text/javascript'> $('#formularioDeInscripcion').modal('hide'); imprimir($personaId); </script>";
    } else {
        return "NO SE PUDO REGISTRAR LA INSCRIPCIÓN.";
    }
}